package com.hb.trade.server.project.order.service;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hb.core.pojo.enums.FeeTypeEnum;
import com.hb.core.pojo.parent.PageResult;
import com.hb.core.pojo.project.order.dto.UserOrderDTO;
import com.hb.core.pojo.project.order.dto.UserOrderGoodsDTO;
import com.hb.core.pojo.project.order.entity.UserOrder;
import com.hb.core.pojo.project.order.vo.UserOrderExportListVO;
import com.hb.core.pojo.project.order.vo.UserOrderListVO;
import com.hb.core.pojo.project.section.dto.BidSectionDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 订单信息 服务类
 * </p>
 *
 * @author zhaojk
 * @since 2021-08-30
 */
public interface UserOrderService extends IService<UserOrder> {

    /**
     * @param userOrder:
     * @Description: 投标人分页查询购买文件列表
     * @Author: zhongdl
     * @Date:2021/12/22 11:39
     * @return: {@link PageResult<   UserOrderDTO  > }
     **/
    PageResult<UserOrderDTO> pagePurchaseFile(UserOrderDTO userOrder);


    /**
     * 获取指定类型的费用
     *
     * @param sectionId 标段ID
     * @return
     */
    BigDecimal getPrice(Long sectionId, FeeTypeEnum feeType);


    /**
     * 获取指定类型的费用
     *
     * @param sectionId 标段ID
     * @return
     */
    BigDecimal getPrice(Long sectionId, Integer feeType);

    /**
     * 获取指定类型的费用
     *
     * @param sectionId 标段ID
     * @return
     */
    JSONObject getPriceInfo(Long sectionId, FeeTypeEnum feeType);

    /**
     * 查询指定项目下的费用审核信息
     *
     * @param sectionId
     * @param feeType
     * @return
     */
    Page<UserOrderDTO> feeManagers(Page<UserOrderDTO> pages, Long sectionId, Integer feeType);

    /**
     * 费用管理统计列表
     *
     * @param sectionDTO
     * @return
     */
    PageResult<UserOrderDTO> feeStatistics(BidSectionDTO sectionDTO);

    /**
     * 查询订单详情
     * 带着商品列表信息
     *
     * @param orderDTOId
     * @return
     */
    UserOrderDTO getWholeInfo(Long orderDTOId);

    /**
     * 查询指定条件的订单列表
     *
     * @param goodsDTO
     * @return
     */
    PageResult<UserOrderDTO> pageWithGoodInfo(UserOrderGoodsDTO goodsDTO);

    /**
     * 查询指定投标人企业下的费用缴纳状态
     *
     * @param userOrderGoodsDTO#sectionId                标段ID
     * @param userOrderGoodsDTO#feeType                  费用类型
     * @param userOrderGoodsDTO#userOrderDTO#orderStatus 订单状态
     * @return
     */
    UserOrder queryUserOrder(UserOrderGoodsDTO userOrderGoodsDTO);

    /**
     * 获取订单详情
     * 该方法通过ID主键或订单号查询数据
     * 优先使用ID
     * 订单号与ID都查询不到数据时返回null
     *
     * @param orderDTO#id         数据主键
     * @param orderDTO#outOrderNo 订单号
     * @return
     */
    UserOrder getUserOrder(UserOrderDTO orderDTO);

    /**
     * @param sectionId:标段id
     * @param feeType:费用类型
     * @param orgId:费用类型
     * @Description: 查询标段订单的费用类型
     * @Author: zhongdl
     * @Date:2022/3/1 13:32
     * @return: {@link List< UserOrderDTO> }
     **/
    List<UserOrderDTO> listUserOrderByFreeType(Long sectionId, Integer feeType, Long orgId);

    /**
     * 物理删除指定时间内未支付订单
     *
     * @param minute 分钟数
     * @return
     */
    List<UserOrder> deleteOrderData(int minute);

    /**
     * 查询成功订单列表
     *
     * @author yuezheng
     * @param userOrderDTO
     * @return PageResult<UserOrderListVO>
     * @date 2022/4/13 7:13 PM
     */
    PageResult<UserOrderListVO> selectOrderSuccessList(UserOrderDTO userOrderDTO);

    /**
     * 统计本月成交额
     *
     * @author yuezheng
     * @param
     * @return java.math.BigDecimal
     * @date 2022/4/14 10:07 AM
     */
    BigDecimal countByOrderAmountToMonth(UserOrderDTO userOrderDTO);

    /**
     * 统计本月成交数
     *
     * @author yuezheng
     * @param
     * @return int
     * @date 2022/4/14 10:12 AM
     */
    Integer countOrderByToMonth(UserOrderDTO userOrderDTO);


    /**
     * Excel导出
     *
     * @author yuezheng
     * @param
     * @return void
     * @date 2022/4/14 1:14 PM
     */
    List<UserOrderExportListVO> exportExcelList(UserOrderDTO userOrderDTO);

//    /**
//     * 分页查询订单管理页面
//     *
//     * @param userOrder
//     * @return
//     */
//    Page<UserOrderDto> findOrderManagementList(UserOrderDto userOrder);
//
//    /**
//     * 根据订单号查询订单信息
//     *
//     * @param orderNo
//     * @return
//     */
//    UserOrder findUserOrderByOrderNo(String orderNo);
//
//    /**
//     * 查询文件下载列表
//     *
//     * @param userOrder
//     * @return
//     */
//    Page<UserOrderDto> findFileDownloadList(UserOrderDto userOrder);
//
//    List<UserOrder> findTenderIdList(String sectionId);
}
